var currentOrgId = "";
var currentOrgPath = "";
var orgNameQueryStr = "";

var orgPanel = function() {
	return {
		getOrgPanel : function() {

			var orgStore = Ext.create('Ext.data.Store', {
				pageSize : globalPageSize,
				// autoLoad: true,
				model : 'orgModel',
				proxy : {
					type : 'ajax',
					url : 'orgServlet?action=getOrgListByCon',
					reader : {
						type : 'json',
						root : 'rows',
						totalProperty : 'total'
					}
				}
			});

			orgStore.on('beforeload', function(store, options) {

				var para = {};
				para.currentOrgId = currentOrgId;
				para.orgName = orgNameQueryStr;
				var paraStr = Ext.encode(para);

				var new_para = {
					condition : paraStr
				};
				Ext.apply(store.proxy.extraParams, new_para);
			});

			var pb = Ext.create("Ext.toolbar.Paging", {
				pageSize : globalPageSize,
				store : orgStore,
				displayInfo : true,
				displayMsg : '共{2}条 当前显示第{0} - {1}条记录',
				emptyMsg : '没有数据'
			});

			var selModel = Ext.create('Ext.selection.CheckboxModel');

			function getPath() {
				return currentOrgPath;
			}

			var orgpanel = Ext.create("Ext.grid.Panel", {
				selModel : selModel,
				viewConfig : {
					loadMask : false
				},
				region : 'center',
				title : '当前机构：',
				iconCls : 'menu-list',
				store : orgStore,
				id : 'orgPanel',
				tbar : this.getToolBar(),
				columns : [ {
					header : '部门代码',
					dataIndex : 'orgCode'
				}, {
					header : '部门名称',
					dataIndex : 'orgName',
					width : 200
				}, {
					header : '所属部门',
					dataIndex : 'parentOrgName',
					renderer : getPath,
					sortable : false
				}, {
					header : '描述',
					dataIndex : 'description',
					renderer : ellipsisStr
				}, {
					header : '创建人',
					dataIndex : 'creator'
				}, {
					header : '创建时间',
					dataIndex : 'createTsStr',
					width : 200
				} ],
				bbar : pb
			});

			// 双击打开编辑窗口
			orgpanel.on('itemdblclick', function(obj, record) {
				orgPanel.getEditOrgPanel(orgStore, record).show();
			});

			var treeStore = new Ext.data.TreeStore({
				model : 'orgTreeNodeModel',
				proxy : {
					type : 'ajax',
					url : 'orgServlet?action=getOrgListByPID'
				},
				root : {
					text : '组织机构',
					id : '0',
					// cls:'menu-list',
					orgcode : '0',
					description : '组织机构',
					expanded : false
				}
			// ,
			// sorters: [{
			// property: 'leaf',
			// direction: 'ASC'
			// }, {
			// property: 'text',
			// direction: 'ASC'
			// }
			// ]
			});

			var orgTree = new Ext.tree.TreePanel({
				animate : false,
				region : 'west',
				id : 'orgTreePanel',
				width : 250,
				border : false,
				viewConfig : {
					loadMask : false
				},
				store : treeStore
			});

			orgTree.on('itemclick', function(view, record, item, index, e, options) {

				currentOrgId = record.data.id;

				var temNode = treeStore.getNodeById(currentOrgId);
				temNode.expand();

				// 先把标题清空
				orgpanel.setTitle("");

				if (record.data.id == '0') {
					orgpanel.setTitle('当前机构：组织机构');
					currentOrgPath = "组织机构";
				} else {
					var path = record.data.text;
					var pid = record.data.id;
					var currentRecord = record;
					while (pid != '0') {
						var pNode = currentRecord.parentNode;
						path = pNode.data.text + "->" + path;
						pid = pNode.data.id;
						currentRecord = treeStore.getNodeById(pid);
					}
					orgpanel.setTitle("当前机构:" + path);
					currentOrgPath = path;
				}

				orgNameQueryStr = "";
				Ext.getCmp("orgNameCom").reset();

				orgStore.loadPage(1);
			});

			var panel = Ext.create("Ext.panel.Panel", {
				title : '>>当前位置：机构注册->组织机构',
				layout : 'border',
				// iconCls:'menu-list',
				items : [ orgTree, orgpanel ]
			});

			return panel;
		},

		getToolBar : function() {

			var tb = Ext.create("Ext.toolbar.Toolbar", {
				items : [ {
					xtype : 'button',
					icon : 'images/icons/add.png',
					text : '新增',
					handler : function() {
						if (currentOrgId == "") {

							Ext.Msg.show({
								title : '提示',
								msg : '请选择机构!',
								buttons : Ext.Msg.YES,
								icon : Ext.Msg.WARNING
							});

							return false;
						}
						var orgStore = Ext.getCmp('orgPanel').getStore();
						orgPanel.getAddOrgPanel(currentOrgId, currentOrgPath, orgStore).show();
					}
				}, {
					xtype : 'button',
					icon : 'images/icons/application_edit.png',
					text : '编辑',
					handler : function() {

						var orgStore = Ext.getCmp('orgPanel').getStore();

						var sm = Ext.getCmp('orgPanel').getSelectionModel();
						var count = sm.getCount();
						if (count != 1) {

							Ext.Msg.show({
								title : '提示',
								msg : '请选择1个部门!',
								buttons : Ext.Msg.YES,
								icon : Ext.Msg.WARNING
							});

							return false;
						}
						var selectRecord = sm.getSelection();

						orgPanel.getEditOrgPanel(orgStore, selectRecord[0]).show();
					}
				}, {
					xtype : 'button',
					icon : 'images/icons/delete.png',
					text : '删除',
					handler : function() {

						var sm = Ext.getCmp('orgPanel').getSelectionModel();
						var count = sm.getCount();

						if (count == 0) {

							Ext.Msg.show({
								title : '提示',
								msg : '请选择机构!',
								buttons : Ext.Msg.YES,
								icon : Ext.Msg.WARNING
							});

							return;
						}

						Ext.Msg.show({
							title : '提示',
							msg : '确认删除所选?',
							buttons : Ext.Msg.YESNO,
							icon : Ext.Msg.QUESTION,
							fn : function(btn, text) {
								if (btn == 'yes') {

									var records = sm.getSelection();

									var idArr = [];
									for ( var i = 0; i < count; i++) {
										idArr.push(records[i].data.orgId);
									}

									var deletData = {};
									deletData.idArr = idArr;

									var f = function(data) {
										var suc = data.suc;
										if (suc) {
											// 删除树节点
											var treeStore = Ext.getCmp("orgTreePanel").getStore();
											for ( var i = 0; i < count; i++) {
												var node = treeStore.getNodeById(idArr[i]);
												var pNode = node.parentNode;
												pNode.removeChild(node);
											}

											Ext.Msg.show({
												title : '提示',
												msg : '删除部门成功!',
												buttons : Ext.Msg.YES,
												icon : Ext.Msg.INFO
											});

											Ext.getCmp('orgPanel').getStore().loadPage(1);
										} else {
											Ext.Msg.show({
												title : '提示',
												msg : '删除部门失败!',
												buttons : Ext.Msg.YES,
												icon : Ext.Msg.INFO
											});
										}
									};

									ajax.call({
										servlet : 'orgServlet?action=delete',
										callPara : deletData,
										callBackMethod : f
									});

								} else {
									return false;
								}
							}
						});
					}
				}, '->', {
					xtype : 'textfield',
					id : 'orgNameCom',
					emptyText : '编码或名称'
				}, '-', {
					xtype : 'button',
					text : '查询',
					icon : 'images/icons/search.gif',
					iconCls : 'x-btn-icon',
					handler : function() {

						var depName = Ext.getCmp("orgNameCom").getValue();

						if (currentOrgId == "") {

							Ext.Msg.show({
								title : '提示',
								msg : '请先选择机构!',
								buttons : Ext.Msg.YES,
								icon : Ext.Msg.WARNING
							});

							return false;
						}

						if (depName == "") {

							Ext.Msg.show({
								title : '提示',
								msg : '请填写所要查询的部门名称!',
								buttons : Ext.Msg.YES,
								icon : Ext.Msg.INFO
							});

							return false;
						}

						orgNameQueryStr = depName;

						var orgStore = Ext.getCmp('orgPanel').getStore();
						orgStore.loadPage(1);
					}
				}, {
					xtype : 'button',
					icon : 'images/icons/arrow_undo.png',
					text : '重置',
					handler : function() {
						Ext.getCmp("orgNameCom").reset();
					}
				} ]
			});

			return tb;
		},
		// 新增窗口
		getAddOrgPanel : function(currentOrgId, currentOrgPath, store) {
			// setup the state provider, all state information will be saved to
			// a cookie
			Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider'));

			var orgForm = Ext.create('Ext.form.Panel', {
				border : false,
				autoHeight : true,
				bodyBorder : false,
				bodyStyle : 'padding:10px',
				frame : true,
				fieldDefaults : {
					labelWidth : 100,
					msgTarget : 'side'
				},
				defaults : {
					anchor : '100%'
				},
				items : [ {
					xtype : 'fieldset',
					title : '部门信息',
					collapsible : true,
					defaultType : 'textfield',
					layout : 'anchor',
					defaults : {
						anchor : '100%'
					},
					items : [ {
						fieldLabel : '部门代码',
						allowBlank : false,
						name : 'orgCode'
					}, {
						fieldLabel : '部门名称',
						allowBlank : false,
						name : 'orgName'
					}, {
						xtype : 'combo',
						name : 'orgType',
						fieldLabel : '部门类型',
						store : orgTypeStore,
						allowBlank : false,
						editable : false,
						queryMode : 'local',
						displayField : 'name',
						valueField : 'value'
					}, {
						fieldLabel : '简称',
						allowBlank : false,
						name : 'shortname'
					}, {
						fieldLabel : '所属机构',
						allowBlank : false,
						name : 'belongOrg',
						readOnly : true,
						value : currentOrgPath
					}, {
						fieldLabel : '电话',
						allowBlank : false,
						name : 'tel'
					}, {
						fieldLabel : '地址',
						allowBlank : false,
						name : 'addr'
					}, {
						xtype : 'textarea',
						fieldLabel : '描述',
						// allowBlank:false,
						name : 'description'
					} ]
				} ],
				buttons : [ {
					text : '保存',
					handler : function() {
						if (orgForm.getForm().isValid()) {
							var addData = {};
							addData.formContent = orgForm.getForm().getValues();
							addData.pid = currentOrgId;

							var f = function(data) {
								var suc = data.suc;
								var text = orgForm.getForm().findField('orgName').getValue();
								var orgcode = orgForm.getForm().findField('orgCode').getValue();
								var description = orgForm.getForm().findField('description').getValue();

								if (suc) {
									store.loadPage(1);
									var treeStore = Ext.getCmp('orgTreePanel').getStore();
									var pNode = treeStore.getNodeById(currentOrgId);
									pNode.appendChild({
										id : data.id,
										text : text,
										cls : 'folder',
										// leaf:true,
										orgcode : orgcode,
										description : description
									});

									Ext.Msg.show({
										title : '提示',
										msg : '新增部门成功!',
										buttons : Ext.Msg.YES,
										icon : Ext.Msg.INFO
									});

									// 关闭窗口
									addOrgWin.close();
								} else {
									Ext.Msg.show({
										title : '提示',
										msg : '删除部门失败!',
										buttons : Ext.Msg.YES,
										icon : Ext.Msg.INFO
									});
								}

							};

							ajax.call({
								servlet : 'orgServlet?action=add',
								callPara : addData,
								callBackMethod : f
							});

							// alert(Ext.encode(data));
						} else {
							Ext.Msg.show({
								title : '提示',
								msg : '请正确填写相关信息后保存!!',
								buttons : Ext.Msg.YES,
								icon : Ext.Msg.INFO
							});
							return false;
						}

					}
				}, {
					text : '取消',
					handler : function() {
						addOrgWin.close();
					}
				} ]
			});

			var addOrgWin = Ext.create("Ext.window.Window", {
				title : '机构注册->组织机构->新增',
				width : 800,
				modal : true,
				layout : 'fit',
				// bodyStyle:'padding:10px',
				items : [ orgForm ]
			});

			return addOrgWin;

		},

		// 编辑
		getEditOrgPanel : function(orgStore, selectRecord) {
			// setup the state provider, all state information will be saved to
			// a cookie
			Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider'));

			var id = selectRecord.data.orgId;
			var orgCode = selectRecord.data.orgCode;
			var orgName = selectRecord.data.orgName;
			var description = selectRecord.data.description;
			var shortname = selectRecord.data.shortname;
			var tel = selectRecord.data.tel;
			var addr = selectRecord.data.addr;
			var orgType = selectRecord.data.orgType;
			var count = selectRecord.data.count;

			var orgForm = Ext.create('Ext.form.Panel', {
				border : false,
				autoHeight : true,
				frame : true,
				bodyBorder : false,
				bodyStyle : 'padding:10px',
				fieldDefaults : {
					labelWidth : 100,
					msgTarget : 'side'
				},
				defaults : {
					anchor : '100%'
				},
				items : [ {
					xtype : 'fieldset',
					title : '部门信息',
					collapsible : true,
					defaultType : 'textfield',
					layout : 'anchor',
					defaults : {
						anchor : '100%'
					},
					items : [ {
						fieldLabel : '部门代码',
						allowBlank : false,
						name : 'orgCode',
						value : orgCode
					}, {
						fieldLabel : '部门名称',
						allowBlank : false,
						name : 'orgName',
						value : orgName
					}, {
						xtype : 'combo',
						name : 'orgType',
						fieldLabel : '部门类型',
						store : orgTypeStore,
						allowBlank : false,
						editable : false,
						mode : 'local',
						displayField : 'name',
						valueField : 'value'
					// ,
					// listeners:{
					// render:function(obj){
					// obj.setValue('集团');
					// }
					// }
					// ,value: orgType
					}, {
						fieldLabel : '简称',
						allowBlank : false,
						name : 'shortname',
						value : shortname
					}, {
						fieldLabel : '所属机构',
						allowBlank : false,
						name : 'belongOrg',
						readOnly : true,
						value : currentOrgPath
					}, {
						fieldLabel : '电话',
						allowBlank : false,
						name : 'tel',
						value : tel
					}, {
						fieldLabel : '地址',
						allowBlank : false,
						name : 'addr',
						value : addr
					}, {
						xtype : 'textarea',
						fieldLabel : '描述',
						// allowBlank:false,
						name : 'description',
						value : description
					} ]
				} ],
				buttons : [ {
					text : '保存',
					handler : function() {
						if (orgForm.getForm().isValid()) {
							var editData = {};
							editData.formContent = orgForm.getForm().getValues();
							// data.pid = currentOrgId;
							editData.id = id;
							var f = function(data) {
								var suc = data.suc;
								var desc = data.desc;
								// var id = data.id;
								var text = orgForm.getForm().findField('orgName').getValue();
								var orgcode = orgForm.getForm().findField('orgCode').getValue();
								var description = orgForm.getForm().findField('description').getValue();

								if (suc) {
									// orgStore.loadPage(1);
									selectRecord.set("orgName", text);
									selectRecord.set("orgcode", orgcode);
									selectRecord.set("description", description);
									selectRecord.commit();

									var treeStore = Ext.getCmp('orgTreePanel').getStore();
									var pNode = treeStore.getNodeById(currentOrgId);

									var currentNode = treeStore.getNodeById(id);

									var flag = false;
									if (count == '0') {
										flag = true;
									}

									pNode.replaceChild({
										id : id,
										text : text,
										cls : 'folder',
										// leaf:flag,
										orgcode : orgcode,
										description : description
									}, currentNode);

									Ext.Msg.show({
										title : '提示',
										msg : '编辑部门成功!',
										buttons : Ext.Msg.YES,
										icon : Ext.Msg.INFO
									});

									// 关闭窗口
									editOrgWin.close();
								} else {
									Ext.Msg.show({
										title : '提示',
										msg : '编辑部门失败!',
										buttons : Ext.Msg.YES,
										icon : Ext.Msg.INFO
									});
								}

							};

							ajax.call({
								servlet : 'orgServlet?action=edit',
								callPara : editData,
								callBackMethod : f
							});

						} else {
							Ext.Msg.show({
								title : '提示',
								msg : '请正确填写相关信息后保存!',
								buttons : Ext.Msg.YES,
								icon : Ext.Msg.INFO
							});
							return false;
						}

					}
				}, {
					text : '取消',
					handler : function() {
						editOrgWin.close();
					}
				} ]
			});

			var editOrgWin = Ext.create("Ext.window.Window", {
				title : '机构注册->组织机构->编辑',
				width : 800,
				modal : true,
				layout : 'fit',
				items : [ orgForm ]
			});

			editOrgWin.on('show', function() {
				if (orgType == '0') {
					orgForm.getForm().setValues({
						orgType : '0'
					});
				} else if (orgType == '1') {
					orgForm.getForm().setValues({
						orgType : '1'
					});
				} else if (orgType == '2') {
					orgForm.getForm().setValues({
						orgType : '2'
					});
				} else if (orgType == '3') {
					orgForm.getForm().setValues({
						orgType : '3'
					});
				}
			});

			return editOrgWin;

		}
	};
}();